const path = require('path');
const nodeExternals = require('webpack-node-externals');
const merge = require('webpack-merge');
const config = require('./webpack.base');
const webpack = require('webpack');

process.env.BABEL_ENV = 'server';//设置 babel 的运行环境
/*
env 用于设置对应环境下的配置, 在编译的时候babel会根据当前环境变量的值来决定采用哪个配置(参看.babelrc)。

env字段的值会从process.env.BABEL_ENV获取，如果BABEL_ENV不存在，则从process.env.NODE_ENV获取，如果NODE_ENV还不存在，则取默认值development，使用这样方式进行配置可以定义多个不同的配置项，同时可以通过环境变量来控制要读取的配置。
*/

const serverConfig = {
  target: 'node',
  mode: 'development',
  entry: './src/server/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'build')
  },
  externals: [nodeExternals()] // 这样require node_modules下的模块时 就不会将其打包进文件 而是保留 require('xxx')的形式
  ,plugins: [
    new webpack.DefinePlugin({
      '__SERVER__': true
    })
  ]
  ,module: {
    rules: [
      {
        test: /\.css?$/,
        use: [
          'isomorphic-style-loader',
          {
            loader: 'css-loader',
            options: {
              importLoaders: 1,
              modules: {
                //localIdentName定义的是生成的css类名, name是css的原文件名, local是你使用本来的css类名
                localIdentName: '[path][name]_[local]_[hash:base64:5]'
              }
            }
          }
        ]
      }
    ]
  }
};

module.exports = merge(config, serverConfig);
